import Vue from 'vue'
import { RouteConfig } from 'vue-router'
import { SubsystemConfig } from './subsystem'

/**
 * 标签视图（参考 RouteConfig）
 * @attribute path: string 路径
 * @attribute fullPath: string 完整路径
 * @attribute name: string 路由名
 * @attribute meta: any 元信息 [可空]
 */
export interface TagView {
  path: string
  fullPath: string
  name: string
  meta?: any
}

/**
 * 错误日志
 * @attribute vm: Vue vue 实例
 * @attribute error: Error 错误对象
 * @attribute info: string 信息
 * @attribute url: string url
 */
export interface ErrorLog {
  vm: Vue
  error: Error
  info: string
  url: string
}

/**
 * App
 * @attribute pageSize.width: number 页面宽
 * @attribute pageSize.height: number 页面高
 * @attribute sidebar.opened: boolean 侧边菜单是否打开
 * @attribute sidebar.withoutAnimation: boolean 侧边菜动画
 * @attribute language: String 语言
 * @attribute componentSize: String 组件尺寸
 * @attribute typerInitialized: boolean “印刷机”组件是否初始化
 * @attribute accessedSubsystems: SubsystemConfig[] 可访问的子系统集
 * @attribute accessedRoutes: RouteConfig[] 可访问的路由集
 * @attribute currentSubsystem: SubsystemConfig 当前子系统 [可空]
 * @attribute currentRoute: RouteConfig 当前路由 [可空]
 * @attribute visitedTagViews: TagView[] 访问过的标签视图
 * @attribute cachedViews: string[] 缓存的视图
 */
export interface App {
  pageSize: {
    width: number
    height: number
  }
  sidebar: {
    opened: boolean
    withoutAnimation: boolean
  }
  language: string
  componentSize: String
  typerInitialized: boolean
  accessedSubsystems: SubsystemConfig[]
  accessedRoutes: RouteConfig[]
  currentSubsystem?: SubsystemConfig
  currentRoute?: RouteConfig
  visitedTagViews: TagView[]
  cachedViews: string[]
  errorlogs: ErrorLog[]
}
